Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Kalkulator z użyciem pętli while, oraz switchu C++


Rekomendowane odpowiedzi

Opublikowano

Witam Mam parę pytań oraz problem :/ Jak usunąć błędy z z kodu .

 

Zasada działania kalkulatora:

1. Wprowadź liczbę

2. Wybierz działanie (jeżeli liczba różna od 0)

3. Wykonaj obliczenia (jeżeli liczba różna od 0)

4. Wróć do kroku 1.

5. Jeżeli wprowadzoną liczbą jest 0, zakończ program.

 

Kod :

#include <iostream>
using namespace std;

int main ()
{
   do
   {


    int a , b , c ;
    char jeden , dwa , trzy , cztery ;

    cout << "Zmienna a wynosi \t: " ;
    cin >> a;
    cin.clear() ;
    cin.sync() ;

    cout << "Zmienna b wynosi \t: " ;
    cin >> b;
    cin.clear();
    cin.sync();

    if(a != 0 &&  b != 0) ;
    {
        cout <<" [1]  Dodawanie "<<endl;
        cout <<" [2]  Odejmowanie "<<endl;
        cout <<" [3]  Mnożenie  "<<endl;
        cout <<" [4]  Dzielenie  "<<endl;
        cout <<" [5]  Zrezygnij \n "<<endl;

        cout << " Wpisz cyfre :  \t " ;
        cin >> c;

   switch(c)
   {
case '1' :
    cout << a << "+" << b << "=" << a+b <<endl;
    break ;
case '2' :
       cout << a << "-" << b << "=" << a-b <<endl;
       break;
case '3' :
cout << a << "*" << b << "=" << a*b << endl;
       break;
case '4' :
cout << a << " / " << b << "=" << a/b <<endl;

case '5' :
cout << "Dziekujemy za skorzystanie z naszego kalkulatora" << endl;

   }
    }
    else
        cout << "Kalkulator obsluguje tylko liczby, zera juz nie"<< endl;


 }while( !a=0 || !b= 0 || !c = 5) ;
    return 0;
}

błedy:

|In function 'int main()':|
53|error: 'else' without a previous 'if'|
57|error: 'a' was not declared in this scope|
57|error: 'b' was not declared in this scope|
57|error: 'c' was not declared in this scope|

Zmienna działa w tej klamrze w której powstała , a jak zrobić by działała w paru? bo te 3 błedy własnie dotyczą że nie znaleziono zmiennej chociaż takowa istnieje ;/ I dlaczego wywala błąd związany coś z else. ??

Kocham mpcforum.pl!!!

18706.png

Weteran
Opublikowano
if(a != 0 && b != 0) ; 

Prawdopodobnie nie chciałeś żeby ta instrukcja nic nie nie robiła. Skasuj ten średnik.

Opublikowano

Masz 2 błędy. Ten co kolega podał wyżej. Oraz w pętlach nie dajemy zmiennych.

 

do
{
int a,b,c
TU TWOJ KOD
}while(warunek)

Powinno wygladac tak:

 

int a,b,c
do
{
TU TWOJ KOD
}while(warunek)


Zmienne inicjujesz poza pętlą a nie w niej bo powstają blędy
Weteran
Opublikowano

hmm.. racja, nie zauważyłem że te zmienne są użyte w warunku w pętli.

A jeszcze co do warunku, to to:

while( !a=0 || !b= 0 || !c = 5) ;

powinno raczej wyglądać tak:

 

while( a!=0 || b!= 0 || c != 5) ;

Dodatkowo switch powinien wyglądać raczej tak:

 

switch(c)
{
case 1 :
cout << a << "+" << b << "=" << a+b <<endl;
break ;
case 2 :
cout << a << "-" << b << "=" << a-b <<endl;
break;
case 3 :
cout << a << "*" << b << "=" << a*b << endl;
break;
case 4 :
cout << a << " / " << b << "=" << a/b <<endl;

case 5 :
cout << "Dziekujemy za skorzystanie z naszego kalkulatora" << endl;

}
 
Opublikowano

Jeśli nie sprawdzasz czy nie zostały podane błędne dane to nie trzeba czyścić strumienia , użyj cin.good()/false() i pętli żeby nie można było wpisać znaków.

Opublikowano

Xau i AdrianQu -- pomogło :D Dzięki

 

Acerel --- w tym programie gdy usune linijke cin.clear(); to program wariuje, a z tym cin.good to o co Ci chodzi że nie można by było wpisać znaków, ale gdzie? ;p

 

PS. pomoże ktoś mi ułożyć warunek do while?? do tego kodu :

#include <iostream>
using namespace std;

int main ()
{
    int a , b , c ;
   do
   {


    int a , b , c ;

    cout << "Zmienna a wynosi \t: " ;
    cin >> a;
       cin.clear() ;
    cin.sync() ;


    cout << "Zmienna b wynosi \t: " ;
    cin >> b;
    cin.clear() ;
    cin.sync() ;
    if(a != 0 &&  b != 0)
    {
        cout <<" [1]  Dodawanie "<<endl;
        cout <<" [2]  Odejmowanie "<<endl;
        cout <<" [3]  Mnożenie  "<<endl;
        cout <<" [4]  Dzielenie  "<<endl;
        cout <<" [5]  Zrezygnij \n "<<endl;

        cout << " Wpisz cyfre :  \t " ;
        cin >> c;

   switch(c)
   {
case 1 :
    cout << "wynik wynosi:  "  <<  a << "+" << b << "=" << a+b <<endl;
    break ;
case 2 :
       cout <<  "Wynik wynosi:  " <<  a << "-" << b << "=" << a-b <<endl;
       break;
case 3 :
cout <<  "wynik wynosi:   "<< a << "*" << b << "=" << a*b << endl;
       break;
case 4 :
cout <<  "wynik wynosi:   " << a << " / " << b << "=" << a/b <<endl;

case 5 :
cout << "Dziekujemy za skorzystanie z naszego kalkulatora" << endl;

   }
    }
    else
        cout << "Kalkulator obsluguje tylko liczby, zera juz nie"<< endl;


 }while( a ==0 && b == 0 && c == 5) ;
    return 0;
}

Warunek ma robić tak by:

Gdy wpiszemy zmienna 0 na początku to pokazuje komunikat że liczba nie moze byc 0 i wtedy ma się kończyć pętla.

Gdy z menu wybierzemy [5] Zrezygnuj to wyskakuje komunikat że :Dziękujemy za skorzystanie z naszego kalkulatora i też się ma kończyć pętla

Gdy wszystko jest poprawnie zrobione to po wyniku otrzymanym znów wyskakuje : wpisz zmienna a

Kocham mpcforum.pl!!!

18706.png

Opublikowano

Siema :D

Dlaczego kalkulator ma nie obsługiwać zera , przecież zmienne a i b są typu int , czyli od -ileśtam :D (dużo) do +dużo :D , do innego z unsigned , w tym typie zmiennej zapisujesz tylko dodatnie.

 

std::cin.good() , sprawdza czy wczytanie liczby DO strumienia się powiodło, w razie niepowodzenia zwraca flage 1 lub 0.

 

jeśli wczytywanie sie powiedzie, i zwróci 1

Jeśli sie nie powiedzie (to znaczy za cyfre wpiszesz znaki, bez tej funkcji program by sie crashował), zwróci 0. /Albo na odwrót , zawsze Mi sie mylą flagi te :D , no nic , poćwiczysz sobie chociaż :D/

W funkcji main utwórz jescze jedna zmienna , bool czydb naprzykład , i zanim wczytasz dane sprawdź ich poprawność.

Masz kod, poradzisz sobie :D

 

Co do wyjścia z programu po wcisnieciu 5 , załaduj biblioteke <conio.h>

za podziekowaniem dopisz getch(); i return 0;

ot wszystko :D

funkcja getch() czeka na dowolny klawisz, także jeśli chcesz żeby podziekowanie dało się odczytać, a nie tylko migneło , to dopisz getcha.

do
{
    std::cout << "Wprowadz liczbe 1" << std::endl;
    std::cin >> a;
    czydb = std::cin.good();
    if(czydb == 0)
    {
        std::cout << "Blad, podaj poprawna liczbe " <<std::endl;
        std::cin.clear();
        std::cin.sync();
    }
}while(czydb != 1);



Opublikowano

funkcja getch() czeka na dowolny klawisz, także jeśli chcesz żeby podziekowanie dało się odczytać, a nie tylko migneło , to dopisz getcha.

Poprawka, czeka na doowolny klawisz i/lub enter :)

 

 

Co do wyjścia z programu po wcisnieciu 5 , załaduj biblioteke <conio.h>

za podziekowaniem dopisz getch(); i return 0;

 

lepiej użyc std::getchar(); z iostream, mniej do includowania.

 

I radze uważac na getchar();

std::getchar();
std::getchar();
std::getchar();
std::cout << "Ok";

taki kod po wpisaniu "aaa" i naciśnięciu enter wyświetli Ok.

Nie pomagam na PW, od tego macie forum!!!

 

#PHP-things

 

 

08FMpDu.png

 

Opublikowano

Acerel- ma nie obsługiwać zera bo tak jest w poleceniu. cin.good już ogarnąłem z Twojego kodu :) spróbuje przerobić swój kod po Twojemu z tym. cin.good/fail :D

Vesim-- lece podług kursu C++ i jeszcze nie spotkałem się z formułką getchar ;p ale dzięki za pomoc Dam edita jak mi się powiedzie lub nie :D

Kocham mpcforum.pl!!!

18706.png

Opublikowano

#include <iostream>

using namespace std;

double dodawanie(double a, double B)

{

return a + b;

}

double Odejmowanie(double a, double B)

{

return a + b;

}

double Mnozenie(double a, double B)

{

return a + b;

}

double dzielenie(double a, double B)

{

return a + b;

}

double kalkulator(double a, double b, int menu)

{

switch(menu)

{

case 1:

return dodawanie(a, B);

break;

case 2:

return Odejmowanie(a, B);

break;

case 3:

return Mnozenie(a, B);

break;

case 4:

return dzielenie(a, B);

break;

}

 

}

int main()

{

double a, b;

int menu;

cout << "Wpisz 1 Liczbe: ";

cin >> a;

cout << "Wpisz 2 Liczbe: ";

cin >> b;

cout << "1)Dodawanie: "

<< "2)Odejmowanie "

<< "3)Mnozenie "

<< "4)Dzielenie " << endl;

cin >> menu;

cout << kalkulator(a, b, menu) << endl;

return 0;

 

}

Dodaj do tego pętle i gitara

Opublikowano

Ok wszystko działa :D I mam pytanie żeby nie zakładać nowego tematu: Napisałem program ktory losuje przypadkowa liczbe i zadaniem gracza jest odgadniecie jej, gdy wpiszemy za mala lub za duża wyskoczy komunikat , i to jest w petli while, gdy odgadniemy petla sie konczy i gratulacje wyskakują. tylko mam problem bo musze dopisac ilosc oddanych strzałów przez gracza . Wg mnie trzeba policzyc ile razy petla zostala uzyta tylko niewiem jak to zrobic , oto kod :

 

#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;
int main()
{
srand( time( NULL ));

int a =(rand()% 1000)+1 ;
int b ;

cout << "wylosowana liczba jest liczba:" << a <<endl;
do
{
    cout << "Obstawiaj Liczbe: " ;
    cin >> b;
    cin.clear();
    cin.sync();
    if(a > 
    cout << " Przykromi, liczba ktora podales jest za mala. Sprobuj ponownie" <<endl;

    if(a < 
        cout << "Przykromi, liczba ktora podales jest za duza. Sprobuj ponownie" << endl;

    if(a == 
        cout << " Gratuluacje !!! Udalo Ci sie odgadnac nasza liczbe  " << endl;
}while(b!=a) ;

cout<< "Prawidlowa  odpowiedzia byla iczba   " << a << "  Liczba twoich strzalow  "  << endl;
return 0;
}

Kocham mpcforum.pl!!!

18706.png

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...